﻿Public Class frmInformesEstadisticos
    Dim utilidades As New Utilidades
    Dim myAccesoDatos As New AccesoDatos

    Private Sub cmdSalir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSalir.Click
        Me.Close()
    End Sub

    Private Sub txtFechaDesde_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtFechaDesde.KeyPress
        utilidades.validarKeyPressNumerico(e)
    End Sub

    Private Sub txtFechaHasta_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtFechaHasta.KeyPress
        utilidades.validarKeyPressNumerico(e)
    End Sub

    Private Sub cmdReport_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdReport.Click
        If utilidades.validarRangoDeFechas(txtFechaDesde, txtFechaHasta) = False Then
            Exit Sub
        End If

        Dim fechaDesde = txtFechaDesde.Text().Trim()
        Dim fechaHasta = txtFechaHasta.Text().Trim()
        Dim fechaDesdeSQL = txtFechaDesde.Text().Trim()
        Dim fechaHastaSQL = txtFechaHasta.Text().Trim()

        If Not (fechaDesde = "/  /" Or fechaHasta = "/  /") Then
            fechaDesdeSQL = utilidades.obtenerFechaFormatoSQLServer2008(fechaDesde)
            fechaHastaSQL = utilidades.obtenerFechaFormatoSQLServer2008(fechaHasta)
        Else
            MsgBox("Fecha Desde es requerida", vbOKOnly + vbCritical, "Atención")
            txtFechaDesde.Focus()
            Exit Sub
        End If

        If opt2.Checked = True Then

            Dim report As New rptGraficoPrestamo
            Dim ds As New dsGraficoPrestamos
            Dim myAccesoDatos As New AccesoDatos
            Dim myConsulta As String

            myConsulta = "SELECT DISTINCT P.ID "
            myConsulta = myConsulta & "FROM PRESTAMOS P INNER JOIN SOLICITUDES_PRESTAMOS S ON (P.ID_SOLICITUD = S.ID) "
            myConsulta = myConsulta & "INNER JOIN CUOTAS C ON (P.ID = C.ID_PRESTAMO) "
            myConsulta = myConsulta & "INNER JOIN CLIENTES CL ON (S.ID_CLIENTE = CL.ID) "
            myConsulta = myConsulta & "INNER JOIN TIPOS_DOCUMENTOS TD ON (CL.ID_TIPO_DOCUMENTO = TD.ID) "
            myConsulta = myConsulta & "INNER JOIN EMPLEOS_CLIENTES EC ON (EC.ID_CLIENTE = CL.ID) "
            myConsulta = myConsulta & "INNER JOIN FACTURAS F ON (F.ID_PRESTAMO = C.ID_PRESTAMO AND F.NRO_CUOTA = C.NRO_CUOTA) "
            myConsulta = myConsulta & "WHERE 1 = 1 "
            If Not (fechaDesde = "/  /" Or fechaHasta = "/  /") Then
                fechaDesdeSQL = utilidades.obtenerFechaFormatoSQLServer2008(fechaDesde)
                fechaHastaSQL = utilidades.obtenerFechaFormatoSQLServer2008(fechaHasta)
                myConsulta = myConsulta & " AND F.FECHA BETWEEN '" + fechaDesdeSQL + "' AND '" + fechaHastaSQL + "'"
            End If
            myConsulta = myConsulta & " AND F.INTERES > " + Convert.ToString(0)


            Dim tabla As Data.DataTable
            tabla = myAccesoDatos.ejecutarConsulta(myConsulta)
            If tabla.Rows.Count > 0 Then
                ''myAccesoDatos.ejecutarConsultaInforme(myConsulta, ds.PrestamosTermino)

                Dim row As Data.DataRow = ds.Datos.NewRow()
                If Not (fechaDesde = "/  /" Or fechaHasta = "/  /") Then
                    row.Item("desde") = fechaDesde
                    row.Item("hasta") = fechaHasta
                Else
                    row.Item("desde") = " --"
                    row.Item("hasta") = " --"
                End If

                ds.Datos.Rows.Add(row)

                Dim rowChart As Data.DataRow
                ''''''''''''''''''''''''''''''''
                myConsulta = "SELECT COUNT (DISTINCT P.ID) "
                myConsulta = myConsulta & "FROM PRESTAMOS P INNER JOIN SOLICITUDES_PRESTAMOS S ON (P.ID_SOLICITUD = S.ID) "
                myConsulta = myConsulta & "INNER JOIN CUOTAS C ON (P.ID = C.ID_PRESTAMO) "
                myConsulta = myConsulta & "INNER JOIN CLIENTES CL ON (S.ID_CLIENTE = CL.ID) "
                myConsulta = myConsulta & "INNER JOIN TIPOS_DOCUMENTOS TD ON (CL.ID_TIPO_DOCUMENTO = TD.ID) "
                myConsulta = myConsulta & "INNER JOIN EMPLEOS_CLIENTES EC ON (EC.ID_CLIENTE = CL.ID) "
                myConsulta = myConsulta & "INNER JOIN FACTURAS F ON (F.ID_PRESTAMO = C.ID_PRESTAMO AND F.NRO_CUOTA = C.NRO_CUOTA) "
                myConsulta = myConsulta & "WHERE 1 = 1 "
                If Not (fechaDesde = "/  /" Or fechaHasta = "/  /") Then
                    fechaDesdeSQL = utilidades.obtenerFechaFormatoSQLServer2008(fechaDesde)
                    fechaHastaSQL = utilidades.obtenerFechaFormatoSQLServer2008(fechaHasta)
                    myConsulta = myConsulta & " AND F.FECHA BETWEEN '" + fechaDesdeSQL + "' AND '" + fechaHastaSQL + "'"
                End If
                myConsulta = myConsulta & " AND F.INTERES > " + Convert.ToString(0)
                myConsulta = myConsulta & " AND EC.ID_TIPO_EMPLEO = " + Convert.ToString(1)

                tabla = myAccesoDatos.ejecutarConsulta(myConsulta)
                Dim cant1 As Integer
                cant1 = Convert.ToInt32(tabla.Rows.Item(0).Item(0))

                For i As Integer = 0 To cant1 - 1
                    rowChart = ds.chart.NewRow()
                    rowChart.Item("tipo") = "Público Provincial"
                    rowChart.Item("cantidad") = "-"
                    ds.chart.Rows.Add(rowChart)
                Next
                ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
                myConsulta = "SELECT COUNT (DISTINCT P.ID) "
                myConsulta = myConsulta & "FROM PRESTAMOS P INNER JOIN SOLICITUDES_PRESTAMOS S ON (P.ID_SOLICITUD = S.ID) "
                myConsulta = myConsulta & "INNER JOIN CUOTAS C ON (P.ID = C.ID_PRESTAMO) "
                myConsulta = myConsulta & "INNER JOIN CLIENTES CL ON (S.ID_CLIENTE = CL.ID) "
                myConsulta = myConsulta & "INNER JOIN TIPOS_DOCUMENTOS TD ON (CL.ID_TIPO_DOCUMENTO = TD.ID) "
                myConsulta = myConsulta & "INNER JOIN EMPLEOS_CLIENTES EC ON (EC.ID_CLIENTE = CL.ID) "
                myConsulta = myConsulta & "INNER JOIN FACTURAS F ON (F.ID_PRESTAMO = C.ID_PRESTAMO AND F.NRO_CUOTA = C.NRO_CUOTA) "
                myConsulta = myConsulta & "WHERE 1 = 1 "
                If Not (fechaDesde = "/  /" Or fechaHasta = "/  /") Then
                    fechaDesdeSQL = utilidades.obtenerFechaFormatoSQLServer2008(fechaDesde)
                    fechaHastaSQL = utilidades.obtenerFechaFormatoSQLServer2008(fechaHasta)
                    myConsulta = myConsulta & " AND F.FECHA BETWEEN '" + fechaDesdeSQL + "' AND '" + fechaHastaSQL + "'"
                End If
                myConsulta = myConsulta & " AND F.INTERES > " + Convert.ToString(0)
                myConsulta = myConsulta & " AND EC.ID_TIPO_EMPLEO = " + Convert.ToString(2)

                tabla = myAccesoDatos.ejecutarConsulta(myConsulta)
                Dim cant2 As Integer
                cant2 = Convert.ToInt32(tabla.Rows.Item(0).Item(0))
                For j As Integer = 0 To cant2 - 1
                    rowChart = ds.chart.NewRow()
                    rowChart.Item("tipo") = "Público Nacional"
                    rowChart.Item("cantidad") = "-"
                    ds.chart.Rows.Add(rowChart)
                Next
                ''''''''''''''''''''''''''''''''''''''''
                myConsulta = "SELECT COUNT (DISTINCT P.ID) "
                myConsulta = myConsulta & "FROM PRESTAMOS P INNER JOIN SOLICITUDES_PRESTAMOS S ON (P.ID_SOLICITUD = S.ID) "
                myConsulta = myConsulta & "INNER JOIN CUOTAS C ON (P.ID = C.ID_PRESTAMO) "
                myConsulta = myConsulta & "INNER JOIN CLIENTES CL ON (S.ID_CLIENTE = CL.ID) "
                myConsulta = myConsulta & "INNER JOIN TIPOS_DOCUMENTOS TD ON (CL.ID_TIPO_DOCUMENTO = TD.ID) "
                myConsulta = myConsulta & "INNER JOIN EMPLEOS_CLIENTES EC ON (EC.ID_CLIENTE = CL.ID) "
                myConsulta = myConsulta & "INNER JOIN FACTURAS F ON (F.ID_PRESTAMO = C.ID_PRESTAMO AND F.NRO_CUOTA = C.NRO_CUOTA) "
                myConsulta = myConsulta & "WHERE 1 = 1 "
                If Not (fechaDesde = "/  /" Or fechaHasta = "/  /") Then
                    fechaDesdeSQL = utilidades.obtenerFechaFormatoSQLServer2008(fechaDesde)
                    fechaHastaSQL = utilidades.obtenerFechaFormatoSQLServer2008(fechaHasta)
                    myConsulta = myConsulta & " AND F.FECHA BETWEEN '" + fechaDesdeSQL + "' AND '" + fechaHastaSQL + "'"
                End If
                myConsulta = myConsulta & " AND F.INTERES > " + Convert.ToString(0)
                myConsulta = myConsulta & " AND EC.ID_TIPO_EMPLEO = " + Convert.ToString(3)

                tabla = myAccesoDatos.ejecutarConsulta(myConsulta)
                Dim cant3 As Integer
                cant3 = Convert.ToInt32(tabla.Rows.Item(0).Item(0))
                For k As Integer = 0 To cant3 - 1
                    rowChart = ds.chart.NewRow()
                    rowChart.Item("tipo") = "Privado"
                    rowChart.Item("cantidad") = "-"
                    ds.chart.Rows.Add(rowChart)
                Next


                report.SetDataSource(ds)

                Dim frm As New frmReportGraficoPrestamos
                frm.crv.ReportSource = report
                frm.ShowDialog()

            Else
                MsgBox("No es posible generar el Informe en base al rango de Fechas.", vbOKOnly + MsgBoxStyle.Information, "Atención")
            End If

            
        End If
        If opt3.Checked = True Then

            Dim report As New rptGraficoClientes
            Dim ds As New dsGraficoClientes
            Dim myAccesoDatos As New AccesoDatos
            Dim myConsulta As String
            Dim tablaNoPagadas As Data.DataTable
            Dim tablaPagadas As Data.DataTable

            myConsulta = "SELECT DISTINCT CL.ID "
            myConsulta = myConsulta + "FROM PRESTAMOS P INNER JOIN CUOTAS C ON (P.ID = C.ID_PRESTAMO) "
            myConsulta = myConsulta + "INNER JOIN SOLICITUDES_PRESTAMOS S ON (P.ID_SOLICITUD = S.ID) "
            myConsulta = myConsulta + "INNER JOIN CLIENTES CL ON (S.ID_CLIENTE = CL.ID) "
            myConsulta = myConsulta + "WHERE C.PAGADA = 'N' AND getDate() > C.FECHA_VENCIMIENTO "

            If Not (fechaDesde = "/  /" Or fechaHasta = "/  /") Then
                fechaDesdeSQL = utilidades.obtenerFechaFormatoSQLServer2008(fechaDesde)
                fechaHastaSQL = utilidades.obtenerFechaFormatoSQLServer2008(fechaHasta)
                myConsulta = myConsulta & " AND '" + fechaHastaSQL + "' > C.FECHA_VENCIMIENTO "
            Else
                myConsulta = myConsulta + " AND getDate() > C.FECHA_VENCIMIENTO "
            End If
            myConsulta = myConsulta + "GROUP BY P.ID, CL.ID HAVING COUNT(C.NRO_CUOTA) = 2"
            tablaNoPagadas = myAccesoDatos.ejecutarConsulta(myConsulta)



            myConsulta = "SELECT DISTINCT CL.ID "
            myConsulta = myConsulta + "FROM PRESTAMOS P INNER JOIN CUOTAS C ON (P.ID = C.ID_PRESTAMO) "
            myConsulta = myConsulta + "INNER JOIN SOLICITUDES_PRESTAMOS S ON (P.ID_SOLICITUD = S.ID) "
            myConsulta = myConsulta + "INNER JOIN CLIENTES CL ON (S.ID_CLIENTE = CL.ID) "
            myConsulta = myConsulta & "INNER JOIN FACTURAS F ON (F.ID_PRESTAMO = C.ID_PRESTAMO AND F.NRO_CUOTA = C.NRO_CUOTA) "
            myConsulta = myConsulta + "WHERE C.PAGADA = 'S' AND getDate() > C.FECHA_VENCIMIENTO "

            If Not (fechaDesde = "/  /" Or fechaHasta = "/  /") Then
                fechaDesdeSQL = utilidades.obtenerFechaFormatoSQLServer2008(fechaDesde)
                fechaHastaSQL = utilidades.obtenerFechaFormatoSQLServer2008(fechaHasta)
                myConsulta = myConsulta & " AND F.FECHA BETWEEN '" + fechaDesdeSQL + "' AND '" + fechaHastaSQL + "'"
            Else
                myConsulta = myConsulta & " AND F.FECHA BETWEEN '" + utilidades.obtenerFechaFormatoSQLServer2008("01/01/1900") + "' AND getDate() "
            End If
            myConsulta = myConsulta + "GROUP BY P.ID, CL.ID HAVING COUNT(C.NRO_CUOTA) >= 2"
            tablaPagadas = myAccesoDatos.ejecutarConsulta(myConsulta)


            If Not (tablaPagadas.Rows.Count = 0 And tablaNoPagadas.Rows.Count = 0) Then
                ''myAccesoDatos.ejecutarConsultaInforme(myConsulta, ds.PrestamosTermino)

                Dim row As Data.DataRow = ds.Datos.NewRow()
                If Not (fechaDesde = "/  /" Or fechaHasta = "/  /") Then
                    row.Item("desde") = fechaDesde
                    row.Item("hasta") = fechaHasta
                Else
                    row.Item("desde") = " --"
                    row.Item("hasta") = " --"
                End If

                ds.Datos.Rows.Add(row)

                Dim rowChart As Data.DataRow

                Dim cant1 As Integer
                cant1 = Convert.ToInt32(tablaNoPagadas.Rows.Count)
                For i As Integer = 0 To cant1 - 1
                    rowChart = ds.chart.NewRow()
                    rowChart.Item("tipo") = "No"
                    rowChart.Item("cantidad") = "-"
                    ds.chart.Rows.Add(rowChart)
                Next
                
                Dim cant2 As Integer
                cant2 = Convert.ToInt32(tablaPagadas.Rows.Count)
                For j As Integer = 0 To cant2 - 1
                    rowChart = ds.chart.NewRow()
                    rowChart.Item("tipo") = "Si"
                    rowChart.Item("cantidad") = "-"
                    ds.chart.Rows.Add(rowChart)
                Next

                report.SetDataSource(ds)

                Dim frm As New frmReportGraficoClientes
                frm.crv.ReportSource = report
                frm.ShowDialog()

            Else
                MsgBox("No es posible generar el Informe en base al rango de Fechas.", vbOKOnly + MsgBoxStyle.Information, "Atención")
            End If
        End If

    End Sub

    Private Sub frmInformesEstadisticos_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        utilidades.confirmarSalirDelFormulario(e)
    End Sub

End Class